//index.js

Page({

  data: {
    tab: 0,
    item: 0,
    playlist: [{
      id: 1, title: '钢琴协奏曲', singer: '肖邦',
      src: '/music/Ode.mp3', coverImgUrl: '/images/cover1.jpg'
    },
      {
        id: 2, title: '奏鸣曲', singer: '莫扎特',
        src: '/music/Ode.mp3', coverImgUrl: '/images/cover2.jpg'
      },
      {
        id: 3, title: '欢乐颂', singer: '贝多芬',
        src: '/music/Ode.mp3', coverImgUrl: '/images/cover3.jpg'
      },
      {
        id: 4, title: '爱之梦', singer: '李斯特',
        src: '/music/Ode.mp3', coverImgUrl: '/images/cover4.jpg'
      }
    ],
    state: 'paused',
    playIndex: 0,
    play: {
      currentTime: '00:00',
      duration: '00:00',
      percent: 0,
      title: '',
      singer: '',
      coverImgUrl: '/images/cover1.jpg',
    },
  },

  audioCtx: null,
  onReady: function() {
    this.audioCtx = wx.createInnerAudioContext()
    const that = this
    this.audioCtx.onError(function () {
      that.next()
    })
    this.audioCtx.onPlay(function () {})
    this.audioCtx.onTimeUpdate(function () {
      that.setData({
        'play.duration' : formatTime(that.audioCtx.duration),
        'play.currentTime' : formatTime(that.audioCtx.currentTime),
        'play.percent' : that.audioCtx.currentTime / that.audioCtx.duration * 100
      })
    })
    this.setMusic(0)
    function formatTime(time) {
      const minute = Math.floor(time / 60) % 60
      const second = Math.floor(time) % 60
      return (minute < 10 ? '0' + minute : minute) + ':' + (second < 10 ? '0' + second : second)
    }
  },

  setMusic: function(index){
    const music = this.data.playlist[index]
    this.audioCtx.src = music.src
    this.setData({
      playIndex: index,
      'play.title': music.title,
      'play.singer': music.singer,
      'play.coverImgUrl': music.coverImgUrl,
      'play.currentTime': '00:00',
      'play.duration': '00:00',
      'play.percent': 0
    })
  },

  play: function(){
    this.audioCtx.play()
    this.setData({state: 'running'})
  },

  pause: function(){
    this.audioCtx.pause()
    this.setData({state: 'paused'})
  },

  next: function(){
    const index = this.data.playIndex >= this.data.playlist.length - 1 ? 0 : this.data.playIndex + 1
    this.setMusic(index)
    if (this.data.state === 'running'){
      this.play()
    }
  },

  changeItem: function (e) {
    this.setData({
      item: e.target.dataset.item
    })
  },

  changeTab: function (e) {
    this.setData({
      tab: e.detail.current
    })
  },

  sliderChange: function (e) {
    const second = e.detail.value * this.audioCtx.duration / 100
    this.audioCtx.seek(second)
  },

  change: function (e) {
    this.setMusic(e.currentTarget.dataset.index)
    this.play()
  },

})
